import { $mchConfig } from "@/http/apiManager"
import storageManage from '@/commons/utils/storageManage.js'
let num = 0 //计算错误此时 超过5次错误 不在出触发
const plugin = requirePlugin("WechatSI")
const pushMsgArr = [] //维护一个消息队列
let backgroundAudioManager = undefined //获取背景音频实例
let audioMp3 = 'wxfile://static/noiseless.mp3'
console.log('执行创建 语音播报逻辑');
// 获取配置项 判断是否 开启 小程序 语音推送
export function getPushStatus () {
    if (!storageManage.token()) return  //未登录 不播放
    $mchConfig('orderConfig').then(({ bizData = [] }) => {
        const weChat = bizData.find(v => v.configKey == "weChatVoice")
        if (weChat && weChat?.configVal == 1) {
            createBgMusice()
        }
    })
}
getPushStatus()
// 创建 背景音乐
function createBgMusice (file) {
    backgroundAudioManager = wx.getBackgroundAudioManager()
    backgroundAudioManager.title = '订单通知'
    backgroundAudioManager.src = audioMp3

    // 监听 音频播放失败事件
    backgroundAudioManager.onError(function (res) {
        if (num >= 5) return
        const fs = wx.getFileSystemManager()
        fs.copyFile({
            srcPath: `static/noiseless.mp3`,
            destPath: `${wx.env.USER_DATA_PATH}/noiseless.mp3`,
            success (res) {
                console.log(res, `${wx.env.USER_DATA_PATH}/noiseless.mp3`)
                audioMp3 = `${wx.env.USER_DATA_PATH}/noiseless.mp3`
                backgroundAudioManager.src = audioMp3
            },
            fail (res) {
                console.error(res)
            }
        })
        num++
    })
    // 监听 音频播放结束事件
    onBgMusiceEnd()
}
// 监听bei背景音乐播放状态
export function onBgMusiceEnd () {
    backgroundAudioManager.onEnded(() => {
        if (pushMsgArr.length > 0) return broadcast(pushMsgArr.pop()) //如果有消息 则继续播放
        backgroundAudioManager.src = audioMp3  //否则播放默认背景音乐
    })
}
export function startOrEndMusice (flag) {
    if (!flag && !!backgroundAudioManager) return backgroundAudioManager.stop()  //关闭背景音乐 地址指向空即可
    if (!backgroundAudioManager) return createBgMusice() // 如果一开始是关闭状态 则创建背景音乐实例
    backgroundAudioManager.src = audioMp3 // 否则重新赋值背景音地址即可
}
export default function (message) {
    if (!backgroundAudioManager) return
    pushMsgArr.unshift(message)  //将消息添加到消息队列头部  背景音乐播放结束后 会对消息队列 进行校验 如果消息队列有消息  会进行播放 否则继续循环背景音乐
}
// 播放订单 
function broadcast (msg) {
    plugin.textToSpeech({
        lang: "zh_CN",
        tts: true,
        content: msg,
        success: function (res) {
            backgroundAudioManager.src = res.filename;
            onBgMusiceEnd()
        },
        fail: function (res) {
            console.log("fail tts", res)
        }
    })
}